package com.bjtu.ptsite.service;

import com.bjtu.ptsite.model.PromotionRule;
import com.bjtu.ptsite.tracker.entity.TrackerMessage;

import java.time.LocalDateTime;

/**
 *
 * @author Zehao Wang, Junjie Zhang, Yutao Wei
 *
 */
public interface PromotionService {
    /**
     * 应用所有促销规则到系统中的种子。
     * 该方法会遍历所有可用的促销规则，并对符合条件的种子应用相应的促销动作。
     */
    void applyPromotionRules();
    /**
     * 应用促销规则到指定infoHash的种子。
     * 该方法会遍历所有可用的促销规则，并对指定infoHash且符合条件的种子应用相应的促销动作。
     *
     * @param infoHash 种子的infoHash值，用于唯一标识一个种子
     */
    void applyPromotionRules(String infoHash);
    /**
     * 检查种子是否满足特定促销规则的条件。
     * 该方法会根据促销规则中定义的条件，判断种子是否符合要求。
     *
     * @param seed 种子的跟踪消息，包含种子的相关信息
     * @param rule 要检查的促销规则
     * @return 如果种子满足促销规则的条件，返回true；否则返回false
     */
    boolean isConditionMet(TrackerMessage seed, PromotionRule rule);
    /**
     * 对种子应用特定的促销动作。
     * 该方法会根据促销规则中定义的动作，对种子执行相应的促销操作。
     *
     * @param seed 种子的跟踪消息，包含种子的相关信息
     * @param rule 要应用的促销规则
     */
    void applyAction(TrackerMessage seed, PromotionRule rule);
    /**
     * 判断创建时间是否在指定阈值的24小时范围内。
     * 该方法用于检查种子的创建时间是否在指定阈值的24小时之内，常用于限时促销判断。
     *
     * @param createTime 种子的创建时间
     * @param threshold  时间阈值，单位取决于具体实现（如小时、天等）
     * @return 如果创建时间在指定阈值的24小时范围内，返回true；否则返回false
     */
    boolean isWithin24Hours(LocalDateTime createTime, Double threshold);
    /**
     * 检查当前日期是否为节假日。
     * 该方法用于判断当前日期是否属于系统定义的节假日，可用于节假日促销活动。
     *
     * @return 如果当前日期是节假日，返回true；否则返回false
     */
    boolean checkHoliday();
} //This is a comment
